﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System;
using System.Collections;
using Lcsoft.UrlRewriter.Parsers;
using Lcsoft.UrlRewriter.Utilities;

namespace Lcsoft.UrlRewriter.Configuration
{
	/// <summary>
	/// 为地址重写动作解析器提供容器。无法继承此类。
	/// </summary>
	public class ActionParserPipeline
	{
		private readonly Hashtable _parsers = new Hashtable();

		/// <summary>
		/// 将指定的解析器类型字符串中包含的 <see cref="IRewriteActionParser"/> 对象添加到容器中。
		/// </summary>
		/// <param name="parserType">包含 <see cref="IRewriteActionParser"/> 对象类型信息的字符串。</param>
		public void AddParser(string parserType) { this.AddParser(TypeHelper.Activate<IRewriteActionParser>(parserType, null)); }

		/// <summary>
		/// 将 <see cref="IRewriteActionParser"/> 对象添加到容器中。
		/// </summary>
		/// <param name="parser"><see cref="IRewriteActionParser"/> 对象。</param>
		public void AddParser(IRewriteActionParser parser)
		{
			if (parser == null) throw new ArgumentNullException("parser");

			ArrayList list;

			if (this._parsers.ContainsKey(parser.Name)) list = (ArrayList)this._parsers[parser.Name];
			else
			{
				list = new ArrayList();

				this._parsers.Add(parser.Name, list);
			}

			list.Add(parser);
		}

		/// <summary>
		/// 获取具有指定标识符的解析器的集合。
		/// </summary>
		/// <param name="verb">解析器标识符。</param>
		/// <returns>返回解析器的集合。</returns>
		public IList GetParsers(string verb) { return this._parsers.ContainsKey(verb) ? (ArrayList)this._parsers[verb] : null; }
	}
}
